package letcode.oneQuestionPerDay._202003._20200302;

import letcode.util.ListNode;

/*
反转链表   迭代
 */
public class ReverseLinkedList_1 {
    public static void main(String[] args) {
        
        ListNode oldhead=new ListNode(1);
        oldhead.next=new ListNode(2);
        oldhead.next.next=new ListNode(3);
        oldhead.next.next.next=new ListNode(4);
        oldhead.next.next.next.next=new ListNode(5);

        ListNode head=reverseList(oldhead);
        System.out.println(head.val);
        System.out.println(head.next.val);
        System.out.println(head.next.next.val);
        System.out.println(head.next.next.next.val);
        System.out.println(head.next.next.next.next.val);
    }
    //提供方法
    public static ListNode reverseList(ListNode head) {
        //定义一个往前的指针，调用循环把指针转向，最后返回新的头部指针。
        ListNode prev=null;
        ListNode curr=head;
        while (curr.next!=null){
            //用一个临时节点起交换的作用
            ListNode temp=curr.next;
            curr.next=prev;
            prev=curr;
            curr=temp;
        }
        return prev;
    }
}

/*
反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题？
 */